package org.jeecg.modules.online.cgreport.mapper;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.modules.online.cgreport.entity.OnlCgreportHead;
import org.jeecg.modules.online.cgreport.entity.OnlCgreportParam;

import java.util.List;
import java.util.Map;

/**
 * @Description: 在线报表配置
 * @Author: jeecg-boot
 * @Date: 2019-03-08
 * @Version: V1.0
 */
public interface OnlCgreportHeadMapper extends BaseMapper<OnlCgreportHead> {

	/**
	 * 执行查询SQL语句
	 *
	 * @param sql
	 * @return
	 */
	List<Map<String, Object>> executeSelect(@Param("sql") String sql);

	/**
	 * 执行查询SQL语句
	 * 
	 * @param sql
	 * @return
	 */
	List<Map<?, ?>> executeSelete(@Param("sql") String sql);

	/**
	 * 查询字典信息
	 * @param sql
	 * @return
	 */
	List<DictModel> queryDictListBySql(@Param("sql") String sql);
	
	/**
	  * 分页查询
	 * @param page
	 * @param sql
	 * @return
	 */
	IPage<Map<String,Object>> selectPageBySql(Page<Map<String,Object>> page,@Param("sqlStr") String sql);
	
	/**
	  * 动态sql查询数据量
	 * @param sql
	 * @return
	 */
	Long queryCountBySql(@Param("sql") String sql);

	/**
	 * 通过reportId获取报表主配置信息
	 * @param reportId
	 * @return
	 */
	Map<String, Object> queryCgReportMainConfig(@Param("reportId") String reportId);
	/**
	 * 通过reportId获取报表字段信息
	 * @param reportId
	 * @return
	 */
	List<Map<String, Object>> queryCgReportItems(@Param("cgrheadId") String reportId);
	/**
	 * 通过reportId获取报参数信息
	 * @param reportId
	 * @return
	 */
	List<OnlCgreportParam> queryCgReportParams(@Param("cgrheadId") String reportId);

	List<Map<String, Object>> selectByCondition(@Param("sqlStr") String sqlStr, @Param("param") Map<String, Object> param);

	IPage<Map<String,Object>> selectPageByCondition(Page<Map<String,Object>> page, @Param("sqlStr") String sqlStr, @Param("param") Map<String, Object> param);

}
